;2008-05-20
;Av Benjamin Ingberg och Patrik Johansson
;
;Lispmonstrets styrfil, ärver rättighter från monster, denna fil består av på vilket sätt lispmonstret skall röra sig

(load "monster.scm")

(define *lispmonster-sprites*
  (list (cons 'default "./sprites/lispmonster/lispmonster.png")))

(define lispmonster%
  (class monster%
    (init x y)
    
    (super-new [x x][y y][w 127][h 183][sprites *lispmonster-sprites*])
    
    (define action-counter -1)
    (define current-action #f)
    
    (define/override (object-interaction obj board)
      (let ((type (send obj get-type)))
        (cond ((eq? type 'player) (send board kill obj)
                                  #t)
              (else #t)))) 
 ;Lispmonstret är speciell, alltså kan han gå över väggar, vilket gör att vi får köra över Monsters object-interaction
        
    (define/override (update board)
      (set! action-counter (- action-counter 1))
      (if (> action-counter 0)
          (do-action current-action board)
          (begin (set! action-counter (+ 10 (random 80)))
                 (let ((rand (random 4)))
                   (cond ((eq? rand 0) (set! current-action 'left)))
                   (cond ((eq? rand 1) (set! current-action 'right)))
                   (cond ((eq? rand 2) (set! current-action 'up)))
                   (cond ((eq? rand 3) (set! current-action 'down))))
                 (do-action current-action board))))
    
    (define/public (do-action action board)
      (let ((x (send this get-x))
            (y (send this get-y)))
      (cond ((eq? action 'left) (send this 
                                      try-move
                                      (- x 3)
                                      y
                                      board))
            ((eq? action 'right) (send this
                                       try-move
                                       (+ x 3)
                                       y
                                       board))
            ((eq? action 'up) (send this 
                                    try-move
                                    x
                                    (- y 3)
                                    board))
            ((eq? action 'down) (send this
                                      try-move
                                      x
                                      (+ y 3)
                                      board)))))))